# @Time : 2020/7/20 11:11
# @Author : Fioman 
# @Phone : 13149920693
"""
5.3节所讲的仿射变换可以将矩形映射为任意平行四边形,透视变换则可以将矩形映射为任意四边形.
透视变换通过函数cv.warpPerspective()实现,该函数的语法是:
dst = cv.warpPerspective(src,M,dsize[,flags[,boarderMode[,borderValue]]])
dst代表透视处理后的输出图像,该图像和原始图像具有相同的类型.dsize决定输出图像的实际大小.
src代表要透视的图像. M 代表一个3*3的变换矩阵.
dsize代表输出图像的尺寸大小.
flags表示插值方式,默认是INTER_LINEAR.
与仿射变换一样,同样可以使用一个函数来生成函数cv.warpPerspective()所使用的转换矩阵.该函数是
cv.getPerspectiveTransform(),其语法格式是:
retval = cv.getPerspectiveTransform(src,dst)
src 代表输入图像的四个顶点的坐标
dst代表输出图像的四个顶点的坐标.
需要注意的是,src参数和dst参数是包含四个点的数组,与放射变换函数cv.getAffineTransfrom()中的三个点是不同的.
"""
import cv2 as cv
import numpy as np

img = cv.imread("lenaColor.png")
rows, cols = img.shape[:2]
print(rows, cols)
pts1 = np.float32([[150, 50],
                   [200, 50],
                   [60, 250],
                   [210, 250]])

pts2 = np.float32([[50, 50],
                   [rows - 50, 50],
                   [50, cols - 50],
                   [rows - 50, cols - 50]])

M = cv.getPerspectiveTransform(pts1,pts2)
dst = cv.warpPerspective(img,M,(cols,rows))

cv.imshow("img",img)
cv.imshow("dst",dst)

cv.waitKey(0)
cv.destroyAllWindows()
